const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const fs = require('fs');
const path = require('path');

const app = express();
const PORT = process.env.PORT || 3000;
const CONFIG_FILE = path.join(__dirname, 'config.json');

// 中间件
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

// 读取配置文件
function readConfig() {
  try {
    const data = fs.readFileSync(CONFIG_FILE, 'utf8');
    return JSON.parse(data);
  } catch (error) {
    console.error('读取配置文件失败:', error);
    return null;
  }
}

// 写入配置文件
function writeConfig(config) {
  try {
    fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), 'utf8');
    return true;
  } catch (error) {
    console.error('写入配置文件失败:', error);
    return false;
  }
}

// 获取配置 - 公开接口
app.get('/api/config', (req, res) => {
  const config = readConfig();
  if (config) {
    res.json({
      errcode: 0,
      message: '获取配置成功',
      data: config
    });
  } else {
    res.status(500).json({
      errcode: 500,
      message: '读取配置失败'
    });
  }
});

// 更新配置 - 管理接口 (实际使用时应添加身份验证)
app.post('/api/admin/config', (req, res) => {
  const { webhost, webviewUrl, addon_name, adminPassword } = req.body;
  
  // 简单的密码验证 (实际使用时应使用更安全的方式)
  const ADMIN_PASSWORD = process.env.ADMIN_PASSWORD || 'admin123';
  if (adminPassword !== ADMIN_PASSWORD) {
    return res.status(401).json({
      errcode: 401,
      message: '密码错误'
    });
  }

  const currentConfig = readConfig();
  if (!currentConfig) {
    return res.status(500).json({
      errcode: 500,
      message: '读取当前配置失败'
    });
  }

  // 更新配置
  const newConfig = {
    ...currentConfig,
    webhost: webhost || currentConfig.webhost,
    webviewUrl: webviewUrl || currentConfig.webviewUrl,
    addon_name: addon_name || currentConfig.addon_name,
    version: currentConfig.version + 1 // 版本号递增
  };

  if (writeConfig(newConfig)) {
    res.json({
      errcode: 0,
      message: '配置更新成功',
      data: newConfig
    });
  } else {
    res.status(500).json({
      errcode: 500,
      message: '保存配置失败'
    });
  }
});

// 健康检查
app.get('/health', (req, res) => {
  res.json({ status: 'ok' });
});

// 启动服务器
app.listen(PORT, () => {
  console.log(`配置管理服务器运行在端口 ${PORT}`);
  console.log(`获取配置: http://localhost:${PORT}/api/config`);
  console.log(`更新配置: http://localhost:${PORT}/api/admin/config`);
});

